package com.hsgene.goods.constants;

import com.hsgene.common.util.exception.ErrorCode;
import com.hsgene.goods.exception.GoodsErrorCode;

/**
 * 商城商品状态
 *
 * @author wangbing
 * @version 1.0, 2018/7/13
 */
public enum GoodsMallStatus {

    /**
     * 待完善
     */
    INCOMPLETE(1, "待完善"),

    /**
     * 待上架
     */
    COMPLETE(2, "待上架"),

    /**
     * 上架待审核
     */
    ONLINE_NOT_AUDITED(3, "上架待审核"),

    /**
     * 上架中
     */
    ONLINE(4, "上架中"),

    /**
     * 下架待审核
     */
    OFFLINE_NOT_AUDIT(5, "下架待审核"),

    /**
     * 终止
     */
    TERMINATION(99, "终止");

    private final int code;

    private final String desc;

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    GoodsMallStatus(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static GoodsMallStatus getEnum(int code) {
        for (GoodsMallStatus status : values()) {
            if (status.code == code) {
                return status;
            }
        }
        throw new IllegalStateException("非法商品状态code值");
    }

    /**
     * 根据状态自检是否可以更新
     *
     * @return 错误提示信息
     */
    public ErrorCode checkUpdate() {
        if (ONLINE.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_UPDATE_ONLINE;
        } else if (ONLINE_NOT_AUDITED.equals(this) || OFFLINE_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_UPDATE_AUDITED;
        } else if (TERMINATION.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_UPDATE_TERMINATION;
        }
        return null;
    }

    /**
     * 根据状态自检是否可以上架
     *
     * @return 错误提示信息
     */
    public ErrorCode checkOnline() {
        if (COMPLETE.equals(this)) {
            return null;
        } else if (INCOMPLETE.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_ONLINE_INCOMPLETE;
        } else if (TERMINATION.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_ONLINE_TERMINATION;
        } else if (OFFLINE_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_ONLINE_OFFLINE_NOT_AUDIT;
        } else if (ONLINE_NOT_AUDITED.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_ONLINE_ONLINE_NOT_AUDIT;
        } else if (ONLINE.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_ONLINED;
        }
        return null;
    }

    /**
     * 根据状态自检是否可以下架
     *
     * @return 错误提示信息
     */
    public ErrorCode checkOffline() {
        if (OFFLINE_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_OFFLINE_OFFLINE_NOT_AUDIT;
        } else if (!ONLINE.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_OFFLINE_NOT_ONLINE;
        }
        return null;
    }

    /**
     * 根据状态自检是否可以审核
     *
     * @return 错误提示信息
     */
    public ErrorCode checkAudit() {
        if (!OFFLINE_NOT_AUDIT.equals(this) && !ONLINE_NOT_AUDITED.equals(this)) {
            return GoodsErrorCode.GOODS_MALL_NOT_AUDIT;
        }
        return null;
    }
}
